﻿Imports System
Imports System.Data
Imports System.Configuration
Imports System.Linq
Imports System.Web
Imports System.Web.Security
Imports System.Web.UI
Imports System.Web.UI.HtmlControls
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports System.Xml.Linq

Imports System.Collections.Generic
Imports BBDD
Imports Elementos
Imports System.Text.RegularExpressions



Namespace Controladores
    _
   
   Public Class controlador
      
      
        Public Shared Function altaOperador(ByVal DNI As String, ByVal nombre As String, ByVal apellidos As String, ByVal contrasena As String) As String

            Dim err As String = ""

            ' Comprueba el nombre
            If nombre.Equals("") Then
                err += "Debes rellenar el campo nombre" + vbCrLf
            End If
            ' Comprueba los apellidos
            If apellidos.Equals("") Then
                err += "Debes rellenar el campo apellidos" + vbCrLf
            End If

            ' Comprueba el DNI
            If DNI.Length <> 9 Then
                err += "El DNI que has introducido es incorrecto" + vbCrLf
            End If
            If Consultas.existeUsuario(DNI) Then
                err += "El DNI que has introducido ya existe" + vbCrLf
            End If

            ' Comprueba la contraseña
            If contrasena.Length < 4 Then
                err += "La contraseña tiene que tener al menos 4 caracteres" + vbCrLf
            End If
            ' si lo anterior es correcto
            If err.Length = 0 Then
                ' Insertamos en BD
                Dim id As Boolean = Consultas.insertarUsuario(DNI, nombre, apellidos, vbNull, vbNull, vbNull, vbNull, vbNull, vbNull, vbNull, vbNull, vbNull, contrasena, 2, 0)

                If id <> True Then
                    err = "error al introducir nuevo usuario"
                End If
            End If


            Return err
        End Function 'altaOperador


        Public Shared Function altaUsuario(ByVal DNI As String, ByVal nombre As String, ByVal apellidos As String, ByVal email As String, ByVal direccion As String, ByVal telefono As Integer, ByVal localidad As String, ByVal provincia As String, ByVal pais As String, ByVal CP As Integer, ByVal saldo As Double, ByVal CC_banco As String, ByVal contrasena As String, ByVal privilegios As Integer, ByVal pendiente As Integer) As String
            Dim err As String = ""

            ' Comprueba el nombre
            If nombre.Equals("") Then
                err += "Debes rellenar el campo nombre" + vbCrLf
            End If
            ' Comprueba los apellidos
            If apellidos.Equals("") Then
                err += "Debes rellenar el campo apellidos" + vbCrLf
            End If
            If direccion.Equals("") Then
                err += "Debes rellenar el campo dirección" + vbCrLf
            End If
            If telefono = 0 Or telefono.ToString().Length > 15 Then

                err += "Debes rellenar el campo telefono" + vbCrLf
            End If
            If localidad.Equals("") Then
                err += "Debes rellenar el campo localidad" + vbCrLf
            End If
            If provincia.Equals("") Then
                err += "Debes rellenar el campo provincia" + vbCrLf
            End If
            If pais.Equals("") Then
                err += "Debes rellenar el campo pais" + vbCrLf
            End If
            If CP.ToString().Length <> 5 Then
                err += "Debes rellenar el campo CP con 5 digitos" + vbCrLf
            End If
            If saldo < 1 Then
                err += "El saldo debe ser igual o superior a 1 €" + vbCrLf
            End If
            If CC_banco.Length < 20 Then
                err += "Debes rellenar el campo cuenta bancaria con 20 dígitos" + vbCrLf
            End If
            If contrasena.Equals("") Then
                err += "Debes rellenar el campo contraseña" + vbCrLf
            End If
            'Comprueba el DNI
            If DNI.Length <> 9 Then
                err += "El DNI que has introducido es incorrecto" + vbCrLf
            End If
            If Consultas.existeUsuario(DNI) Then
                err += "El DNI que has introducido ya existe" + vbCrLf
            End If

            ' Comprueba el mail
            If Not comprobarMail(email) Then
                err += "El email que has introducido es incorrecto" + vbCrLf
            End If
            If Consultas.existeemail(email) And email <> "" Then
                err += "El email que has introducido ya existe" + vbCrLf
            End If
            ' Comprueba el contrasena
            If contrasena.Length < 4 Then
                err += "El contrasena tiene que tener al menos 4 caracteres" + vbCrLf
            End If
            If err.Length = 0 Then
                ' Insertamos en BD
                Dim id As Boolean = Consultas.insertarUsuario(DNI, nombre, apellidos, email, direccion, telefono, localidad, provincia, pais, CP, saldo, CC_banco, contrasena, privilegios, pendiente)

                If id <> True Then
                    err += "err al introducir nuevo usuario"
                End If
            End If

            ' Manda un mail de confirmación
            Return err
        End Function 'altaUsuario

        Public Shared Function bajaUsuario(ByVal DNI As String) As String
            Dim err As String = ""
            If Not Consultas.borrarUsuario(DNI) Then
                Return "error al borrar usuario"
            End If
            Return err
        End Function 'bajaUsuario

        Public Shared Function modificarDatosUsuario(ByVal DNI As String, ByVal nombre As String, ByVal apellidos As String, ByVal email As String, ByVal direccion As String, ByVal telefono As Integer, ByVal localidad As String, ByVal provincia As String, ByVal pais As String, ByVal CP As Integer, ByVal saldo As Double, ByVal pass As String, ByVal CC_banco As String, ByVal pendiente As Integer) As String
            Dim err As String = ""

            ' Comprueba el DNI
            If email.Equals("") Then
                email = Consultas.getemail(DNI)
            End If
            If direccion.Equals("") Then
                direccion = Consultas.getdireccion(DNI)
            End If
            If telefono = -1 Or telefono.ToString().Length > 15 Then
                telefono = Consultas.gettelefono(DNI)
            End If
            If localidad.Equals("") Then
                localidad = Consultas.getlocalidad(DNI)
            End If
            If provincia.Equals("") Then
                provincia = Consultas.getprovincia(DNI)
            End If
            If pais.Equals("") Then
                pais = Consultas.getpais(DNI)
            End If
            If CP.ToString().Length <> 4 Then
                CP = Consultas.getCP(DNI)
            End If
            If pass.Equals("") Then
                pass = Consultas.getcontrasena(DNI)
            End If
            ' Insertamos en BD
            Dim res As Boolean = Consultas.modificarUsuario(DNI, nombre, apellidos, email, direccion, telefono, localidad, provincia, pais, CP, saldo, CC_banco, pass, 1, pendiente)
            If Not res Then
                err = "error al modificar datos usuario"
            End If
            Return err
        End Function 'modificarDatosUsuario


        Private Shared Function comprobarMail(ByVal mail As String) As Boolean

            Dim patternStrict As String = "^(([^<>()[\]\\.,;:\s@\""]+" & "(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@" & "((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" & "\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" & "[a-zA-Z]{2,}))$"

            Dim reStrict As New Regex(patternStrict)

            Return reStrict.IsMatch(mail)
        End Function 'comprobarMail

        Public Shared Function login(ByVal DNI As String, ByVal pass As String) As String
            Dim err As String = ""

            If Not Consultas.existeUsuario(DNI) Then
                Return err + "El DNI es incorrecto"
            Else
                If Not Consultas.getcontrasena(DNI).Equals(pass) Then
                    Return err + "La contraseña es incorrecta"
                Else
                    If Consultas.getesPendiente(DNI) = 1 Then
                        Return err + "Tu cuenta no ha sido validada por el administrador"
                    End If
                End If
            End If
            Return err
        End Function 'login

        Public Shared Function consultarsaldo(ByVal DNI As String) As [Double]
            Return Consultas.getsaldo(DNI)
        End Function 'consultarsaldo

        Public Shared Function existeUsuario(ByVal DNI As String) As String
            Dim err As String = ""
            If Not Consultas.existeUsuario(DNI) Then
                Return err + "No existe el usuario"
            End If
            Return err
        End Function 'existeUsuario


        'ComprasVenta
        Public Shared Function comprarAccion(ByVal DNI As String, ByVal id As String, ByVal cantidad As Integer) As String
            Dim err As String = ""

            If cantidad < 1 Then
                Return err + "Cantidad incorrecta"
            End If

            If Not Consultas.existeAccion(id) Then
                Return err + "La acción indicada no existe"
            End If

            Dim valor As Integer = Consultas.comprarAccion(DNI, id, cantidad)
            If valor = -1 Then
                Return err + "No se puede llevar a cabo la operacion, compruebe los campos"
            ElseIf valor = -2 Then
                Return err + "No dispone de saldo suficiente"
            End If
            Return err
        End Function 'comprarAccion

        Public Shared Function comprarAccionPorValor(ByVal DNI As String, ByVal id As String, ByVal cantidad As Integer, ByVal mejor As Double) As String
            Dim err As String = ""

            If cantidad < 1 Then
                Return err + "Cantidad incorrecta"
            End If

            If mejor <= 0 Then
                Return err + "Indique un valor positivo"
            End If

            If Not Consultas.existeAccion(id) Then
                Return err + "La acción indicada no existe"
            End If

            Dim valor As Integer = Consultas.comprarAccionPorValor(DNI, id, cantidad, mejor)
            If valor = -1 Then
                Return err + "err en la compra por valor"
            End If
            If valor = -2 Then
                Return err + "No se encuentra la accion"
            End If
            If valor = -4 Then
                Return err + "Error"
            End If
            Return err
        End Function 'comprarAccionPorValor


        Public Shared Function venderAccion(ByVal DNI As String, ByVal id As String, ByVal cantidad As Integer) As String
            Dim err As String = ""

            If cantidad < 1 Then
                Return err + "Cantidad incorrecta"
            End If

            If Not Consultas.existeAccion(id) Then
                Return err + "La acción indicada no existe"
            End If
            Dim valor As Integer = Consultas.venderAccion(DNI, id, cantidad)
            If valor = -1 Then
                Return err + "error en la venta"
            End If
            Return err
        End Function 'venderAccion

        Public Shared Function venderAccionPorValor(ByVal DNI As String, ByVal id As String, ByVal cantidad As Integer, ByVal mejor As Double) As String
            Dim err As String = ""

            If cantidad < 1 Then
                Return err + "Cantidad incorrecta"
            End If

            If mejor <= 0 Then
                Return err + "Indique un valor positivo"
            End If

            If Not Consultas.existeAccion(id) Then
                Return err + "La acción indicada no existe"
            End If
            Dim valor As Integer = Consultas.venderAccionPorValor(DNI, id, cantidad, mejor)
            If valor = -1 Then
                Return err + "err en la venta por valor"
            End If
            Return err
        End Function 'venderAccionPorValor


        Public Shared Function borrarCompras(ByVal idC As Integer) As String
            Dim err As String = ""
            If Not Consultas.borrarCompras(idC) Then
                Return err + "No se ha podido eleiminar la compra"
            End If
            Return err
        End Function 'borrarCompras

        Public Shared Function borrarVenta(ByVal idV As Integer) As String
            Dim err As String = ""
            If Not Consultas.borrarVenta(idV) Then
                Return err + "No se ha podido eliminar la venta"
            End If
            Return err
        End Function 'borrarVenta


        Public Shared Function retiradaEfectivo(ByVal DNI As String, ByVal cantidad As Double) As String
            Dim err As String = ""
            If cantidad < 1 Then
                Return err + "Indique una cantidad correcta por favor"
            End If

            If cantidad > Consultas.getsaldo(DNI) Then
                Return err + "No dispone de saldo para llevar a cabo esa retirada de dinero"
            End If
            If Not Consultas.retiradaEfectivo(DNI, cantidad) Then
                Return err + "err en la operación. saldo insuficiente"
            End If
            Return err
        End Function 'retiradaEfectivo

        Public Shared Function ingresarEfectivo(ByVal DNI As String, ByVal cantidad As Double) As String
            Dim err As String = ""
            If Not Consultas.ingresarEfectivo(DNI, cantidad) Then
                Return err + "No se ha podido llevar a cabo el ingreso"
            End If
            Return err
        End Function 'ingresarEfectivo


        Public Shared Function cancelarOrdenCompras(ByVal idc As String) As String

            Dim err As String = ""
            If Not Consultas.cancelarOrdenCompras(idc) Then
                Return err + "err en la cancelación de la orden de compra. No existe la orden de compra"
            End If
            Return err
        End Function 'cancelarOrdenCompras

        Public Shared Function cancelarOrdenVenta(ByVal idv As Integer) As String

            Dim err As String = ""
            If Not Consultas.cancelarOrdenVenta(idv) Then

                Return err + "err en la cancelación de la orden de venta. No existe la orden de venta"
            End If
            Return err
        End Function 'cancelarOrdenVenta



        'Listas
        Public Shared Function listarAcciones() As String

            Return Consultas.listarAcciones()
        End Function 'listarAcciones


        Public Shared Function listarCompras(ByVal pendiente As Integer, ByVal DNI As String, ByVal activo As Integer) As String

            Return Consultas.listarCompras(pendiente, DNI, activo)
        End Function 'listarCompras

        Public Shared Function listarVenta(ByVal pendiente As Integer, ByVal DNI As String) As String

            Return Consultas.listarVenta(pendiente, DNI)
        End Function 'listarVenta

        Public Shared Function listarCartera(ByVal DNI As String) As String

            Return Consultas.listarCartera(DNI)
        End Function 'listarCartera

        Public Shared Function listarClientes(ByVal pendiente As Integer) As String
            Return Consultas.listarUsuarios(pendiente)
        End Function 'listarClientes
      
      
      Public Shared Sub CreateMessageAlert(senderPage As System.Web.UI.Page, alertMsg As String, alertKey As String)
         Dim strScript As String = "<script language=JavaScript>alert('" + alertMsg + "')</script>"
            If Not senderPage.ClientScript.IsStartupScriptRegistered(alertKey) Then
                senderPage.ClientScript.RegisterStartupScript(senderPage.GetType, alertKey, strScript)
            End If
      End Sub 'CreateMessageAlert 
   End Class 'controlador 
End Namespace 'Controladores 